package cn.btks.resultintegration.achievements.service;


import cn.btks.commonserver.result.ResultState;
import cn.btks.resultintegration.achievements.pojo.Achievements;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;

/**
 * @Author lijun
 * @Date 2020/12/16 16:00
 */
public interface AchievementsService {

    /**
     * 查询所有成果数据
     * @return
     */
    List<Achievements> findAll();

    /**
     * 根据ID查询成果数据
     * @param id
     * @return
     */
    Achievements findById(Long id);

    /**
     * 查询某类型的所有成果数据
     * @param achievementsTypeId
     * @return
     */
    List<Achievements> findAllByAchievementsTypeId(Long achievementsTypeId);

    /**
     * 查询目录下的所有成果数据
     * @param catalogId
     * @return
     */
    List<Achievements> findAllByCatalogId(Long catalogId);

    /**
     * 查询目录下(多个子目录)的所有成果数据
     * @param catalogIds
     * @return
     */
    List<Achievements> findAllByCatalogIds(List<Long> catalogIds);

    /**
     * 查询目录下的某类成果类型的数据
     * @param catalogId
     * @param achievementsTypeId
     * @return
     */
    List<Achievements> findAllByCatalogIdAndAchievementsTypeId(Long catalogId,Long achievementsTypeId);

    /**
     * 查询目录下(多个子目录)的某类成果类型的数据
     * @param catalogIds
     * @param achievementsTypeId
     * @return
     */
    List<Achievements> findAllByCatalogIdAndAchievementsTypeIds(List<Long> catalogIds,Long achievementsTypeId);

    /**
     * 分页查询上传矢量成果
     * @param pageNumber
     * @param pageSize
     * @param isApproved 审核状态
     * @return
     */
    ResultState findPage(Integer pageNumber, Integer pageSize, Integer isApproved);

    /**
     * 保存成果数据
     * @param multipartFiles
     * @param request
     * @return
     */
    ResultState save(Achievements achievements, List<MultipartFile> multipartFiles, HttpServletRequest request);

    /**
     * 保存成果数据(管控清单、矢量文件、佐证材料)
     *
     * @param isLayerFeature 是否要素（0：管控单元 1：管控要素）
     * @param achievements
     * @param multipartTextFile 管控清单文件
     * @param multipartVectorFiles 矢量文件
     * @param request
     * @return
     */
    ResultState save(Integer isLayerFeature, Achievements achievements, MultipartFile multipartTextFile, List<MultipartFile> multipartVectorFiles, List<MultipartFile> multipartEvidenceFiles, HttpServletRequest request) throws Exception;

    /**
     * 保存压缩文件并解析
     * @param achievements
     * @param multipartFileZip
     * @param multipartTextFile
     * @param request
     * @return
     */
    ResultState saveZipFile(Achievements achievements,MultipartFile multipartFileZip,MultipartFile multipartTextFile,HttpServletRequest request) throws Exception;

    /**
     * 更新成果数据
     * @param multipartFiles
     * @param request
     * @return
     */
    ResultState update(Achievements achievements, List<MultipartFile> multipartFiles, HttpServletRequest request);

    /**
     * 更新成果数据(管控清单、矢量文件、佐证材料)
     * @param isLayerFeature 是否要素（0：管控单元 1：管控要素）
     * @param achievements
     * @param multipartTextFile 管控清单文件
     * @param multipartVectorFiles 矢量文件
     * @param multipartEvidenceFiles 佐证材料
     * @param request
     * @return
     * @throws IOException
     */
    ResultState update(Integer isLayerFeature, Achievements achievements, MultipartFile multipartTextFile, List<MultipartFile> multipartVectorFiles, List<MultipartFile> multipartEvidenceFiles, HttpServletRequest request) throws Exception;

    /**
     * 根据ID及成果类型删除成果数据
     * @param id
     * @param typeId
     * @return
     */
    ResultState delete(Long id,Long typeId);

    /**
     * 人工审核
     * @param isApproved
     * @param verifyContent
     * @param achievementId
     * @param request
     * @return
     */
    ResultState manualVerify(Integer isApproved,String verifyContent,Long achievementId,HttpServletRequest request) throws Exception;

    /**
     * 矢量转换
     * @param fileList
     * @param request
     * @return
     */
    ResultState vectorConvert(List<MultipartFile> fileList,HttpServletRequest request) throws Exception;
}
